package com.ffcs.crmd.tsp.core.netty;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ffcs.crmd.tsp.api.dto.netty.RemotingCommand;
import com.ffcs.crmd.tsp.common.constant.LoggerName;
import com.ffcs.crmd.tsp.core.util.RemotingUtil;
import com.ffcs.crmd.tsp.core.util.XmlUtil;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**
 * 
 * 功能说明:自定义的netty通信体的编码
 *
 * @author ZHONGFUHUA
 * 
 * @Date 2016年1月18日 下午3:04:02
 *
 *
 * 版本号  |   作者   |  修改时间   |   修改内容
 *
 */
public class NettyEncoder extends MessageToByteEncoder<RemotingCommand>{
    
    /**
     * 日志
     */
    private final Logger log = LoggerFactory.getLogger(LoggerName.RemotingLoggerName);

    @Override
    protected void encode(ChannelHandlerContext ctx, RemotingCommand remotingCommand, ByteBuf out) throws Exception {
        try{
            String obj = XmlUtil.toXml(remotingCommand);
            byte[] data = obj.getBytes();
            out.writeBytes(data);
        }catch(Throwable e){
            log.error("NETTY SERVER: encoder datachannel[{}] remotingCommand[{}]  exception ",ctx.channel(), remotingCommand, e);
            RemotingUtil.closeChannel(ctx.channel());
        }
    }
    
}
